昨天我們已經安裝 ControlNet 的插件至 SD,今天就來介紹 ControlNet 原理相關的內容,ControlNet 是一個文生圖的擴充組件,可以調整 SD 輸出的結果,本日內容包含:什麼是ControlNet、ControlNet的演算法、及ControlNet的特色。
ControlNet 是一個不用透過重新訓練 SD 模型就能做到客製化文生圖的一種方法,如下圖。
可以看到兩種模式的範例生成,一種是提供類似草圖作為輸入,並生成不同風格的圖像,生成的風格由ControlNet控制,也就是所謂的 Canny 模式,另一種以姿勢作為輸入,並以此作為依據去生成符合輸入風格的圖像,可以看到輸出的人都有保持相同的姿勢,這就是 Human pose 模式。
在進行 ControlNet 的概念驗證前有先做過幾類的相關研究:
左圖代表原始的網路架構,右圖代表新加入的 ControlNet 架構,它將零卷積加入到其中,以初始化權重。
ControlNet 在 SD 的基礎上,將 SD 中的層凍結( Frozen ),並且添加一個可學習的分支,這個分支就是一個 Condition,並在 Condition 的起始位置和結束位置都增加零卷積,保證訓練的穩定性,並且 Condition 的特徵會疊加回 SD 的解碼器特徵上,以達成控制生成的效果。
ControlNet 提供了文生圖客製化的新方法,可以不用重新訓練 SD 模型,讓高度客製化變得可能,無論是姿勢、紋理、框架等方面都能達到不錯的效果,搭配 LoRA 使用可以有更精細的效果,這也是現在使用 SD 的標準方式了。
這是基於前面提過的 Adaptor 的改良版本,與 ControlNet 不同的是,它可以以多個 Condition 作為輸入,這些 Condition 可以是不同類型。
另外,T2I-Adaptor 是透過 SD 的編碼器 ( Encoder )把 Condition 輸入進去,而 ControlNet 是透過 SD 的解碼器 ( Decoder ) 輸入 Condition。
這個編碼器與解碼器的架構就是 SD 當中的 U-Net。
這個作法也與 ControlNet 及 T2I-Adaptor 類似,主要的概念是它將輸入分別 Global 和 Local,Global 負責將特徵輸入到 SD 當中的 U-Net 層及多注意力模組,Local 則是雜訊的圖片,雙管齊下去調整生成圖片的風格,簡言之,就是它將需要生成的特徵作抽離,逐步輸入像是色彩、紋理、乃至框架,以達成控制生成的效果,參考下圖。
今天我們介紹了關於 ControlNet 及其他相關的內容;例如,什麼是ControlNet、ControlNet的演算法、ControlNet的特色、T2I Adaptor、及Composer,明天會介紹 SwinIR 的內容,明天見!